2023/12/232000字符

Function

函数最大的特点:高内聚,弱耦合

声明方式:

function test1 () {}  // test1.name = test1
// 命名式函数表达式
var test2 = function abc () {}  // test2.name = abc
// 匿名式函数表达式  --->  函数表达式
var test3 = function () {}  // test3.name = test3
function test (a, b) {  // 函数声明 (形参,不限制位数) 
    // var a, b;  相当于在函数内部声明

    // 执行体...
    console.log(arguments);  //--> [1, 2, 3]  实参
    console.log(test.length);  //--> 2  形参长度
    return a + b;  // 返回值,不写 return js 会隐式的加一个
}
test(1, 2, 3);  // 函数调用 (实参)

两种方式没有任何区别,包括调用方式

立即执行函数

(function () {
    var a = 123;
    var b = 234;
    console.log(a + b);
}())  //--> 357

var num = (function (a, b, c) {
    var d = a + b + c * 2 - 2;
    return d;
}(1, 2, 3))
console.log(num);  //--> 7

两种写法:

(function () {}());  // W3C 官方标准
(function () {})();
function test(){
    var a = 123;
}  // 直接加 (); 会报错,只有表达式才能被执行符号执行
test();

var test = function () {
    console.log("a");
}();  //--> a  函数被立即执行 被执行符号执行的表达式会变成立即执行函数
test();  //--> test is not a function  立即执行函数会把函数名称销毁

+ function test () {  // 通过运算符来实现一个立即执行函数
    console.log("a");
}();  //--> a
test();  //--> tset is not function

变量的生命周期

  1. 局部变量:函数执行完销毁;
  2. 全局变量:页面关闭后销毁。

执行上下文(当前代码执行环境 EC)

  1. 环境:全局、函数、eval;
  2. 当代码遇到以上三种环境时,都会产生一个执行栈。

执行上下文栈(ECS)/ 函数调用栈(call stack)